package partThree;
/* 本类用于练习字符串的拼接*/
public class TestString3 {
    public static void main(String[] args) {
        //需求，将26个字母拼接10000次
        String s = "aaaaabbbbbcccccdddddeeeee";
        //method1(s);
        //method2(s);
        //methodInsert(s);
        //methodDelete(s);
        methodReplace(s);
    }
    //使用方式一进行字符串的拼接
    private static void method1(String s) {
        //1.创建一个变量用来保存拼接后的结果
        String result = "";
        //5 给程序添加一个计时的功能
        //5.1在循环开始前记录当前时间作为开始时间
        long t1 = System.currentTimeMillis();
        //2.执行循环10000次
        for (int i = 0; i < 10000; i++) {
            //每轮循环中拼接字符串
            result = result + s ;
        }
        //5.2在循环结束后记录当前时间作为结束时间
        long t2 = System.currentTimeMillis();
        //4.循环结束后打印拼接的效果
        System.out.println(result);

        //5.3打印循环消耗的时间
        System.out.println(t2-t1);
        System.out.println(t2); //1631609138674  当前时间与协调世界时间（1970年1月1日00点）的毫秒差
    }


    //使用方式二进行字符串的拼接
    private static void method2(String s) {
        //1.创建工具类对象
        StringBuffer sb = new StringBuffer();
        StringBuilder sb2 = new StringBuilder();

        //5.1在循环执行之前记录当前时间作为开始时间
        long t1 = System.currentTimeMillis();
        System.out.println(sb2.length());
        //2.让循环执行10000次进行拼接
        for (int i = 0; i < 10000; i++) {
            //3.在每一轮循环中，使用工具类append()进行拼接
            /* 我们常用的拼接方法就是StringBulder/StringBuffer中的append()*/
            //sb.append(s);
            sb2.append(s);

        }
        //5.2在循环执行之后记录当前时间作为结束时间
        long t2 = System.currentTimeMillis();
        //4.在循环结束后打印拼接效果
        //System.out.println(sb);
        System.out.println(sb2);
        //6 求出拼接花费的时间
        System.out.println(t2-t1 + "ms");
    }

    //StringBuder的insert方法
    private static void methodInsert(String s){
        //1.创建工具栏对象，因为我们要在builder中直接插入数据，插入数据时需要指定数据下标，所以这里不能为空，需要传入一个字符串
        StringBuilder builder = new StringBuilder(s);
        //在指定位置插入字符
        builder.insert(3, "999");
        //将工具类对象转换为string并输出,当然，不转换为string字符串，直接输出也可以
        System.out.println(builder.length());
        System.out.println(builder.toString());
    }

    //StringBuder的insert方法
    private static void methodDelete(String s){
        //1.创建工具栏对象，因为我们要在builder中直接插入数据，插入数据时需要指定数据下标，所以这里不能为空，需要传入一个字符串
        StringBuilder builder = new StringBuilder(s);
        //删除指定位置的字符，含头不含尾
        builder.delete(5, 10);
        //将工具类对象转换为string并输出,当然，不转换为string字符串，直接输出也可以
        System.out.println(builder.length());
        System.out.println(builder.toString());
    }

    //StringBuder的insert方法
    private static void methodReplace(String s){
        //1.创建工具栏对象，因为我们要在builder中直接插入数据，插入数据时需要指定数据下标，所以这里不能为空，需要传入一个字符串
        StringBuilder builder = new StringBuilder(s);
        //删除指定位置的字符，含头不含尾
        builder.replace(5, 10,"6666666666");
        //将工具类对象转换为string并输出,当然，不转换为string字符串，直接输出也可以
        System.out.println(builder.length());
        System.out.println(builder.toString());
    }
}

